home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / bbs / bbstro.s next >
Text File  |  1999-01-25  |  36KB  |  1,267 lines

  1.     Section    codice,CODE
  2.  
  3.     incdir    "dh1:programs/asmone/modem/bbs/"
  4.     include    "DaWorkBench.s"    
  5.     include    "startup2.s"
  6.  
  7. DMASET        equ    %1000001110000000
  8. WAITDISK    equ    10
  9.  
  10. START:
  11.     movem.l    d0-d7/a0-a6,-(SP)    ; setto la musica
  12.     lea    P61_data,a0    ; Indirizzo del modulo in a0
  13.     lea    $dff000,a6    ; Ricordiamoci il $dff000 in a6!
  14.     sub.l    a1,a1        ; I samples non sono a parte, mettiamo zero
  15.     sub.l    a2,a2        ; no samples -> modulo non compattato
  16.     lea    samples,a2    ; modulo compattato! Buffer destinazione per
  17.                 ; i samples (in chip ram) da indicare!
  18.     bsr.w    P61_Init
  19.     movem.l    (SP)+,d0-d7/a0-a6
  20.  
  21.     move.l    BaseVbr(PC),A1
  22.     move.l    #MyInt6c,$6C(A1)
  23.     move.w    #DMASET,$dff096        ; DMACON - abilita bitplane e copper
  24.     move.w    #$e020,$dff09a        ; INTENA - Abilito Master and lev6
  25.  
  26.     lea    BPLPOINTERS,A1
  27.     move.l    #PICTURE,d0
  28.     move.w    d0,6(a1)
  29.     swap    d0
  30.     move.w    d0,2(a1)
  31.      swap    d0
  32.  
  33.     move.l    #VUOTO,d0
  34.     lea    BPLPOINTERStesto,A1    
  35.      move.w    d0,6(a1)
  36.      swap    d0
  37.      move.w    d0,2(a1)
  38.      swap    d0
  39.  
  40.     bsr.w    maketabz
  41.     bsr.w    makeoffy
  42.     bsr.w    makecube
  43.  
  44.     bsr.w    PRINTATESTO
  45.  
  46.     move.l    #COPPERLIST,$dff080
  47.     move.w    d0,$dff088
  48.  
  49.     clr.l    VBcounter
  50.  
  51. LOOP:
  52.     bsr.w    WBLAN
  53.  
  54.     lea    PTRPIC(pc),a0        ; double buffering
  55.     movem.l    (a0),d0-d1
  56.     exg.l    d0,d1
  57.     movem.l    d0-d1,(a0)
  58.     lea    BPLPOINTERS,a0
  59.     move.w    d0,6(a0)
  60.     swap    d0
  61.     move.w    d0,2(a0)
  62.  
  63.     bsr.w    LINECOP        ; Effetto "supercar"
  64.  
  65.     bsr.w    CUBO3D
  66.     bsr.w    MUOVIPIC
  67.     bsr.w    MUOVIPIC
  68.     bsr.w    RIMBALZO
  69.  
  70.     btst    #6,$bfe001    ; se premi il mouse ESCI!!!
  71.     beq.w    ESCI
  72.  
  73.     cmpi.l    #3500,VBcounter
  74.     blo.s    LOOP
  75.  
  76.     clr.l    VBcounter
  77.  
  78. ESCI:
  79.     lea    $dff000,a6    ; stoppo la musica
  80.     bsr.w    P61_End
  81.     rts            ; esci
  82.  
  83. ptrpic:
  84.     dc.l    Picture,Picture+ScreenX*ScreenY/8
  85.  
  86.  
  87. ******************************************************************************
  88. ;            ROUTINE CHE ASPETTA IL VBL
  89. ******************************************************************************
  90.  
  91. WBLAN:
  92.     move.l    $dff004,d0
  93.     and.l    #$0001ff00,d0
  94.     cmp.l    #$00002000,d0
  95.     bne.s    WBLAN
  96. WBLAN1:
  97.     move.l    $dff004,d0
  98.     and.l    #$0001ff00,d0
  99.     cmp.l    #$00002000,d0
  100.     beq.s    WBLAN1
  101.     rts
  102.  
  103. ******************************************************************************
  104.             ; Interrupt level 3, VERTB...
  105. ******************************************************************************
  106.  
  107.     cnop    0,4
  108. MyInt6c:
  109.     btst    #5,$DFF01F
  110.     beq.s    NoIntVertb
  111.     movem.l    D0-D7/A0-A6,-(SP)
  112.     st    FrameFlagCounter
  113.     addq.l    #1,VBcounter
  114.     movem.l    (SP)+,D0-D7/A0-A6
  115. NoIntVertb:
  116.     btst    #4,$DFF01F
  117.     beq.w    NoIntCoper
  118. NoIntCoper:
  119.     move.w    #$70,$DFF09C
  120.     rte
  121.  
  122. *****************************************************************************
  123.  
  124. FrameFlagCounter:
  125.     dc.w    0
  126.  
  127. AspettaFrameFlag:
  128.     sf    FrameFlagCounter
  129. StoFlaNon:
  130.     tst.b    FrameFlagCounter
  131.     beq.b    StoFlaNon
  132.     rts
  133.  
  134. AspettVBL:
  135.     cmp.b    #$40,$dff006
  136.     bne.s    AspettVBL
  137. AspettVBL2:
  138.     cmp.b    #$40,$dff006
  139.     beq.s    AspettVBL2
  140.     rts
  141.  
  142. *******************************************************************************
  143.  
  144. VBcounter:
  145.     dc.l    0
  146.  
  147. *****************************************************************************
  148. *    ROUTINE CHE SPOSTA L'IMMAGINE IN OGNI DIREZIONE
  149. *****************************************************************************
  150.  
  151. ; Uses: d0-d3/a0-a1
  152.  
  153. MUOVIPIC:
  154.     move.l    indtabx(pc),a0    ; a0=ptr position x
  155.     cmpa.l    #endtabx,a0
  156.     bne.s    nextvalx
  157.     lea    tabposx(pc),a0
  158. nextvalx:
  159.     move.l    indtaby(pc),a1    ; a1=ptr position y
  160.     cmpa.l    #endtaby,a1
  161.     bne.s    nextvaly
  162.     lea    tabposy(pc),a1
  163. nextvaly:
  164.     moveq    #0,d0
  165.     move.w    (a0)+,d0    ; [d0.w=position x in mem]
  166.     moveq    #0,d1
  167.     move.w    (a1)+,d1    ; [d1.w=position y in mem]
  168.     move.l    d1,d3
  169.     lsl.w    #5,d1
  170.     lsl.w    #3,d3
  171.     add.w    d3,d1        ; d1.w=offset y for bplptr
  172.     move.l    d0,d2
  173.     lsr.w    #3,d2
  174.     andi.w    #$fffe,d2    ; d2.w=offset x for bplptr
  175.     move.l    a0,indtabx
  176.     andi.w    #$000f,d0    ; d0.b=value for bplcon1
  177.     move.l    a1,indtaby
  178.  
  179.     move.b    d0,BplCon1+3    ; ok bplcon1 in cop
  180.     move.l    #Picture,d0
  181.     sub.l    d1,d0
  182.     sub.l    d2,d0        ; d0=address to point pic
  183.     bsr.w    PuntaPic
  184.  
  185.     rts
  186.  
  187. indtabx:
  188.     dc.l    tabposx
  189. indtaby:
  190.     dc.l    tabposy
  191.  
  192. tabposx:
  193.     DC.W    $009F,$009F,$009F,$009F,$009F,$009F,$009F,$009E,$009E,$009E
  194.     DC.W    $009D,$009D,$009C,$009C,$009B,$009A,$009A,$0099,$0098,$0097
  195.     DC.W    $0096,$0096,$0095,$0094,$0093,$0092,$0091,$0090,$008E,$008D
  196.     DC.W    $008C,$008B,$008A,$0088,$0087,$0086,$0084,$0083,$0081,$0080
  197.     DC.W    $007E,$007D,$007B,$007A,$0078,$0077,$0075,$0073,$0072,$0070
  198.     DC.W    $006F,$006D,$006B,$0069,$0068,$0066,$0064,$0063,$0061,$005F
  199.     DC.W    $005D,$005C,$005A,$0059,$0057,$0056,$0054,$0052,$0050,$004F
  200.     DC.W    $004D,$004B,$0049,$0048,$0046,$0044,$0043,$0041,$003F,$003E
  201.     DC.W    $003C,$003B,$0039,$0038,$0036,$0035,$0033,$0032,$0030,$002F
  202.     DC.W    $002E,$002C,$002B,$002A,$0028,$0027,$0026,$0025,$0024,$0023
  203.     DC.W    $0022,$0021,$0020,$001F,$001E,$001D,$001C,$001B,$001B,$001A
  204.     DC.W    $0019,$0019,$0018,$0018,$0017,$0017,$0016,$0016,$0016,$0015
  205.     DC.W    $0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015,$0015
  206.     DC.W    $0015,$0015,$0016,$0016,$0016,$0017,$0017,$0018,$0018,$0019
  207.     DC.W    $0019,$001A,$001B,$001C,$001C,$001D,$001E,$001F,$0020,$0021
  208.     DC.W    $0022,$0023,$0024,$0025,$0026,$0028,$0029,$002A,$002B,$002D
  209.     DC.W    $002E,$002F,$0031,$0032,$0034,$0035,$0037,$0038,$003A,$003B
  210.     DC.W    $003D,$003E,$0040,$0042,$0043,$0045,$0047,$0048,$004A,$004C
  211.     DC.W    $004D,$004F,$0051,$0053,$0054,$0056,$0058,$005A,$005A,$005C
  212.     DC.W    $005E,$0060,$0061,$0063,$0065,$0067,$0068,$006A,$006C,$006D
  213.     DC.W    $006F,$0071,$0072,$0074,$0076,$0077,$0079,$007A,$007C,$007D
  214.     DC.W    $007F,$0080,$0082,$0083,$0085,$0086,$0087,$0089,$008A,$008B
  215.     DC.W    $008C,$008E,$008F,$0090,$0091,$0092,$0093,$0094,$0095,$0096
  216.     DC.W    $0097,$0098,$0098,$0099,$009A,$009A,$009B,$009C,$009C,$009D
  217.     DC.W    $009D,$009E,$009E,$009E,$009F,$009F,$009F,$009F,$009F,$009F
  218. endtabx:
  219.  
  220. tabposy:
  221.     DC.W    $0064,$0066,$0068,$006A,$006B,$006D,$006F,$0071,$0072,$0074
  222.     DC.W    $0076,$0077,$0079,$007B,$007C,$007E,$0080,$0081,$0083,$0084
  223.     DC.W    $0086,$0088,$0089,$008A,$008C,$008D,$008F,$0090,$0091,$0093
  224.     DC.W    $0094,$0095,$0097,$0098,$0099,$009A,$009B,$009C,$009D,$009E
  225.     DC.W    $009F,$00A0,$00A1,$00A2,$00A2,$00A3,$00A4,$00A5,$00A5,$00A6
  226.     DC.W    $00A6,$00A7,$00A7,$00A8,$00A8,$00A8,$00A9,$00A9,$00A9,$00A9
  227.     DC.W    $00A9,$00A9,$00AA,$00A9,$00A9,$00A9,$00A9,$00A9,$00A9,$00A8
  228.     DC.W    $00A8,$00A8,$00A7,$00A7,$00A6,$00A6,$00A5,$00A5,$00A4,$00A3
  229.     DC.W    $00A2,$00A2,$00A1,$00A0,$009F,$009E,$009D,$009C,$009B,$009A
  230.     DC.W    $0099,$0098,$0097,$0095,$0094,$0093,$0091,$0090,$008F,$008D
  231.     DC.W    $008C,$008A,$0089,$0088,$0086,$0084,$0083,$0081,$0080,$007E
  232.     DC.W    $007C,$007B,$0079,$0077,$0076,$0074,$0072,$0071,$006F,$006D
  233.     DC.W    $006B,$006A,$0068,$0066,$0064,$0064,$0062,$0060,$005E,$005D
  234.     DC.W    $005B,$0059,$0057,$0056,$0054,$0052,$0051,$004F,$004D,$004C
  235.     DC.W    $004A,$0048,$0047,$0045,$0044,$0042,$0040,$003F,$003E,$003C
  236.     DC.W    $003B,$0039,$0038,$0037,$0035,$0034,$0033,$0031,$0030,$002F
  237.     DC.W    $002E,$002D,$002C,$002B,$002A,$0029,$0028,$0027,$0026,$0026
  238.     DC.W    $0025,$0024,$0023,$0023,$0022,$0022,$0021,$0021,$0020,$0020
  239.     DC.W    $0020,$001F,$001F,$001F,$001F,$001F,$001F,$001E,$001F,$001F
  240.     DC.W    $001F,$001F,$001F,$001F,$0020,$0020,$0020,$0021,$0021,$0022
  241.     DC.W    $0022,$0023,$0023,$0024,$0025,$0026,$0026,$0027,$0028,$0029
  242.     DC.W    $002A,$002B,$002C,$002D,$002E,$002F,$0030,$0031,$0033,$0034
  243.     DC.W    $0035,$0037,$0038,$0039,$003B,$003C,$003E,$003F,$0040,$0042
  244.     DC.W    $0044,$0045,$0047,$0048,$004A,$004C,$004D,$004F,$0051,$0052
  245.     DC.W    $0054,$0056,$0057,$0059,$005B,$005D,$005E,$0060,$0062,$0064
  246. endtaby:
  247.  
  248. ******************************************************************************
  249. *    ROUTINE CHE PUNTA L'IMMAGINE IN COPPERLIST
  250. *
  251. * Input: d0=picture address
  252. ******************************************************************************
  253.  
  254. PUNTAPIC:
  255.     lea    BPLPOINTERS,a1
  256.     move.w    d0,6(a1)
  257.     swap    d0
  258.     move.w    d0,2(a1)
  259.     swap    d0
  260.     rts
  261.  
  262. *****************************************************************************
  263. *            ROUTINE DI 3D
  264. *****************************************************************************
  265.  
  266. ScreenX = 320
  267. ScreenY = 256
  268.  
  269. CUBO3D:
  270.  
  271. ; -=-=-=-=-=-=-=-=-=- Pulisci buffer -=-=-=-=-=-=-=-=-=-=-
  272.  
  273.     move.l    sp,oldsp
  274.     move.l    ptrpic(pc),sp
  275.     lea    ScreenX*ScreenY/8(sp),sp
  276.     movem.l    clrreg,a0-a6/d0-d6
  277.     move.w    #ScreenX*ScreenY/8/(14*4)-1,d7
  278. .clrscr:
  279.     movem.l    d0-d6/a0-a6,-(sp)
  280.     dbra    d7,.clrscr
  281.     movem.l    d0-d6/a0-a4,-(sp)
  282.     move.l    oldsp,sp
  283.     
  284. ; -=-=-=-=-=-=-=-=-=- Rotazione -=-=-=-=-=-=-=-=-=-
  285.  
  286.     lea    angles,a0        ; ptr angles
  287.     lea    SinTab(pc),a1        ; ptr sintab
  288.     lea    SinTab+1024/4*2(pc),a2    ; ptr costab
  289.     lea    xyzcosta,a4        ; ptr costants
  290.     move.w    #1023,d7        ; and angle mask
  291.  
  292.     movem.w    (a0),d0-d2
  293.     addq.w    #daz,d0
  294.     and.w    d7,d0            ; d0=ax
  295.     move.w    d0,(a0)+
  296.     addq.w    #day,d1
  297.     and.w    d7,d1            ; d1=ay
  298.     move.w    d1,(a0)+
  299.     addq.w    #dax,d2
  300.     and.w    d7,d2            ; d2=az
  301.     move.w    d2,(a0)
  302.  
  303.     move.w    (a2,d2.w*2),d5        ; cos(az)=c3
  304.     move.w    (a1,d2.w*2),d4        ; sin(az)=s3    
  305.     move.w    (a2,d1.w*2),d3        ; cos(ay)=c2
  306.     move.w    (a1,d1.w*2),d2        ; sin(ay)=s2
  307.     move.w    (a2,d0.w*2),d1        ; cos(ax)=c1
  308.     move.w    (a1,d0.w*2),d0        ; sin(ax)=s1
  309.  
  310.     move.w    d5,d6
  311.     muls    d3,d6
  312.     move.l    d6,a0        ;
  313.     move.w    d4,d7
  314.     muls    d2,d7
  315.     move.l    d7,a1        ;
  316.     add.l    d7,d7
  317.     add.l    d7,d7
  318.     swap    d7
  319.     muls    d0,d7
  320.     add.l    d6,d7
  321.     add.l    d7,d7
  322.     add.l    d7,d7
  323.     swap    d7
  324.     move.w    d7,(a4)+    ; A
  325.     move.w    d4,d6
  326.     muls    d3,d6
  327.     move.l    d6,a2        ;
  328.     move.w    d2,d7
  329.     muls    d5,d7
  330.     move.l    d7,a3        ;
  331.     add.l    d7,d7
  332.     add.l    d7,d7
  333.     swap    d7
  334.     muls    d0,d7
  335.     sub.l    d6,d7
  336.     add.l    d7,d7
  337.     add.l    d7,d7
  338.     swap    d7
  339.     move.w    d7,(a4)+    ; B
  340.     move.w    d2,d7
  341.     muls    d1,d7
  342.     add.l    d7,d7
  343.     add.l    d7,d7
  344.     swap    d7
  345.     move.w    d7,(a4)+    ; C
  346.     move.w    d4,d7
  347.     muls    d1,d7
  348.     add.l    d7,d7
  349.     add.l    d7,d7
  350.     swap    d7
  351.     move.w    d7,(a4)+    ; D
  352.     move.w    d5,d7
  353.     muls    d1,d7
  354.     add.l    d7,d7
  355.     add.l    d7,d7
  356.     swap    d7
  357.     move.w    d7,(a4)+    ; E
  358.     move.w    d0,d7
  359.     neg.w    d7
  360.     move.w    d7,(a4)+    ; F
  361.     move.l    a2,d7
  362.     add.l    d7,d7
  363.     add.l    d7,d7
  364.     swap    d7
  365.     muls    d0,d7
  366.     sub.l    a3,d7
  367.     add.l    d7,d7
  368.     add.l    d7,d7
  369.     swap    d7
  370.     move.w    d7,(a4)+    ; G
  371.     move.l    a0,d7
  372.     add.l    d7,d7
  373.     add.l    d7,d7
  374.     swap    d7
  375.     muls    d0,d7
  376.     add.l    a1,d7
  377.     add.l    d7,d7
  378.     add.l    d7,d7
  379.     swap    d7
  380.     move.w    d7,(a4)+    ; H
  381.     muls    d1,d3
  382.     add.l    d3,d3
  383.     add.l    d3,d3
  384.     swap    d3
  385.     move.w    d3,(a4)        ; I
  386.  
  387.     lea    BuffPointsXYZ,a0
  388.     lea    PointsXYZ,a1
  389.     lea    xyzcosta,a4        ; ptr costants
  390.     move.w    #PointsObj-1,d7
  391. .looprot1:
  392.     movem.w    (a0)+,d0-d2        ; d0=x  d1=y  d2=z
  393.  
  394.     movem.w    (a4)+,d3-d5
  395.     muls.w    d0,d3            ; d3=A*x
  396.     muls.w    d1,d4            ; d4=B*y
  397.     muls.w    d2,d5            ; d5=C*z
  398.     add.l    d4,d3
  399.     add.l    d5,d3            ; d3=xr
  400.     add.l    d3,d3
  401.     add.l    d3,d3
  402.     swap    d3
  403.     move.w    d3,(a1)+
  404.  
  405.     movem.w    (a4)+,d3-d5
  406.     muls.w    d0,d3            ; d3=D*x
  407.     muls.w    d1,d4            ; d4=E*y
  408.     muls.w    d2,d5            ; d5=F*z
  409.     add.l    d4,d3
  410.     add.l    d5,d3            ; d3=yr
  411.     add.l    d3,d3
  412.     add.l    d3,d3
  413.     swap    d3
  414.     move.w    d3,(a1)+
  415.     
  416.     movem.w    (a4)+,d3-d5
  417.     muls.w    d0,d3            ; d3=G*x
  418.     muls.w    d1,d4            ; d4=H*y
  419.     muls.w    d2,d5            ; d5=I*z
  420.     add.l    d4,d3
  421.     add.l    d5,d3            ; d3=zr
  422.     add.l    d3,d3
  423.     add.l    d3,d3
  424.     swap    d3
  425.     move.w    d3,(a1)+
  426.  
  427.     lea    xyzcosta,a4        ; ptr costants
  428.     dbra    d7,.looprot1
  429.  
  430. ; -=-=-=-=-=-=-=-=-=- Prospettiva -=-=-=-=-=-=-=-=-=-=-=-
  431.  
  432.     lea    PointsXYZ,a0        ; a0=ptr points 3d
  433.     lea    PointsXY,a1        ; a1=ptr points 2d
  434.     lea    tabz+511*4,a2        ; ptr tabz for z=0
  435.     move.w    #ScreenX/2-100,d3        ; d3=cx
  436.     move.w     #ScreenY/2-95,d4        ; d4=cy
  437.     move.w    #PointsObj-1,d7
  438. .loopprosp:
  439.     movem.w    (a0)+,d0-d2        ; d0=x  d1=y  d2=z
  440.     move.l    (a2,d2.w*4),d2        ; d5=prosp z in 16.16
  441.     muls.l    d2,d0            ; d0=xp
  442.     swap    d0
  443.     add.w    d3,d0
  444.     move.w    d0,(a1)+
  445.     muls.l    d2,d1            ; d1=yp
  446.     swap    d1
  447.     add.w    d4,d1
  448.     move.w    d1,(a1)+
  449.     dbra    d7,.loopprosp
  450.  
  451. ; -=-=-=-=-=-=-=-=-=- Clipping -=-=-=-=-=-=-=-=-=-
  452.  
  453.     lea    PointsXY,a0
  454.     lea    offsety,a1
  455.     move.l    ptrpic(pc),a2
  456.     moveq    #0,d1
  457.     moveq    #7,d3            ; and mask
  458.     move.w    #PointsObj-1,d7
  459. .loopplot:
  460.     move.w    (a0)+,d0        ; d0=xp
  461.     move.w    (a0)+,d1        ; d1=yp
  462.     move.w    (a1,d1.w*2),d2        ; right offsety to plot point
  463.     move.w    d0,d1
  464.     and.b    d3,d1            ; ptr bit of byte x to plot
  465.     not.b    d1            ; invert bit sequence
  466.     lsr.w    #3,d0
  467.     add.w    d0,d2            ; ptr byte of pixel to plot
  468.     bset.b    d1,(a2,d2.w)        ; plot point
  469. .noplot:
  470.     dbra    d7,.loopplot
  471.     rts
  472.  
  473. SinTab:
  474.     DC.W    $0032,$0096,$00FA,$015F,$01C3,$0227
  475.     DC.W    $028B,$02F0,$0354,$03B8,$041C,$0480
  476.     DC.W    $04E4,$0548,$05AC,$0610,$0674,$06D8
  477.     DC.W    $073B,$079F,$0802,$0866,$08C9,$092D
  478.     DC.W    $0990,$09F3,$0A56,$0AB9,$0B1C,$0B7F
  479.     DC.W    $0BE1,$0C44,$0CA6,$0D08,$0D6A,$0DCC
  480.     DC.W    $0E2E,$0E90,$0EF2,$0F53,$0FB4,$1016
  481.     DC.W    $1077,$10D7,$1138,$1199,$11F9,$1259
  482.     DC.W    $12B9,$1319,$1379,$13D8,$1437,$1497
  483.     DC.W    $14F5,$1554,$15B3,$1611,$166F,$16CD
  484.     DC.W    $172A,$1788,$17E5,$1842,$189F,$18FB
  485.     DC.W    $1957,$19B3,$1A0F,$1A6A,$1AC6,$1B21
  486.     DC.W    $1B7B,$1BD6,$1C30,$1C8A,$1CE4,$1D3D
  487.     DC.W    $1D96,$1DEF,$1E47,$1EA0,$1EF7,$1F4F
  488.     DC.W    $1FA6,$1FFD,$2054,$20AB,$2101,$2156
  489.     DC.W    $21AC,$2201,$2256,$22AA,$22FF,$2352
  490.     DC.W    $23A6,$23F9,$244C,$249E,$24F0,$2542
  491.     DC.W    $2593,$25E4,$2635,$2685,$26D5,$2725
  492.     DC.W    $2774,$27C3,$2811,$285F,$28AD,$28FA
  493.     DC.W    $2947,$2993,$29DF,$2A2B,$2A76,$2AC1
  494.     DC.W    $2B0C,$2B56,$2B9F,$2BE8,$2C31,$2C7A
  495.     DC.W    $2CC1,$2D09,$2D50,$2D97,$2DDD,$2E23
  496.     DC.W    $2E68,$2EAD,$2EF1,$2F35,$2F79,$2FBC
  497.     DC.W    $2FFE,$3040,$3082,$30C3,$3104,$3144
  498.     DC.W    $3184,$31C3,$3202,$3240,$327E,$32BC
  499.     DC.W    $32F9,$3335,$3371,$33AC,$33E7,$3422
  500.     DC.W    $345C,$3495,$34CE,$3506,$353E,$3576
  501.     DC.W    $35AD,$35E3,$3619,$364E,$3683,$36B7
  502.     DC.W    $36EB,$371E,$3751,$3783,$37B5,$37E6
  503.     DC.W    $3816,$3847,$3876,$38A5,$38D3,$3901
  504.     DC.W    $392F,$395B,$3988,$39B3,$39DE,$3A09
  505.     DC.W    $3A33,$3A5C,$3A85,$3AAE,$3AD5,$3AFC
  506.     DC.W    $3B23,$3B49,$3B6F,$3B94,$3BB8,$3BDC
  507.     DC.W    $3BFF,$3C22,$3C44,$3C65,$3C86,$3CA6
  508.     DC.W    $3CC6,$3CE5,$3D04,$3D22,$3D3F,$3D5C
  509.     DC.W    $3D78,$3D94,$3DAF,$3DC9,$3DE3,$3DFC
  510.     DC.W    $3E15,$3E2D,$3E44,$3E5B,$3E72,$3E87
  511.     DC.W    $3E9C,$3EB1,$3EC5,$3ED8,$3EEB,$3EFD
  512.     DC.W    $3F0E,$3F1F,$3F2F,$3F3F,$3F4E,$3F5C
  513.     DC.W    $3F6A,$3F77,$3F84,$3F90,$3F9B,$3FA6
  514.     DC.W    $3FB0,$3FBA,$3FC3,$3FCB,$3FD3,$3FDA
  515.     DC.W    $3FE0,$3FE6,$3FEC,$3FF0,$3FF4,$3FF8
  516.     DC.W    $3FFA,$3FFD,$3FFE,$3FFF,$3FFF,$3FFF
  517.     DC.W    $3FFE,$3FFD,$3FFB,$3FF8,$3FF5,$3FF1
  518.     DC.W    $3FEC,$3FE7,$3FE1,$3FDB,$3FD4,$3FCC
  519.     DC.W    $3FC4,$3FBB,$3FB2,$3FA8,$3F9D,$3F92
  520.     DC.W    $3F86,$3F79,$3F6C,$3F5E,$3F50,$3F41
  521.     DC.W    $3F31,$3F21,$3F11,$3EFF,$3EED,$3EDB
  522.     DC.W    $3EC7,$3EB4,$3E9F,$3E8A,$3E75,$3E5F
  523.     DC.W    $3E48,$3E30,$3E18,$3E00,$3DE7,$3D3D
  524.     DC.W    $3DB3,$3D98,$3D7C,$3D60,$3D43,$3D26
  525.     DC.W    $3D08,$3CEA,$3CCA,$3CAB,$3C8B,$3C6A
  526.     DC.W    $3C48,$3C26,$3C04,$3BE1,$3BBD,$3B99
  527.     DC.W    $3B74,$3B4F,$3B29,$3B02,$3ADB,$3AB3
  528.     DC.W    $3A8B,$3A62,$3A39,$3A0F,$39E4,$39B9
  529.     DC.W    $398E,$3962,$3935,$3908,$38DA,$38AC
  530.     DC.W    $387D,$384D,$381D,$37ED,$37BC,$378A
  531.     DC.W    $3758,$3725,$36F2,$36BF,$368A,$3656
  532.     DC.W    $3620,$35EB,$35B4,$357D,$3546,$350E
  533.     DC.W    $34D6,$349D,$3464,$342A,$33F0,$33B5
  534.     DC.W    $3379,$333D,$3301,$32C4,$3287,$3249
  535.     DC.W    $320B,$31CC,$318D,$314D,$310D,$30CC
  536.     DC.W    $308B,$304A,$3008,$2FC5,$2F82,$2F3F
  537.     DC.W    $2EFB,$2EB6,$2E72,$2E2C,$2DE7,$2DA1
  538.     DC.W    $2D5A,$2D13,$2CCC,$2C84,$2C3B,$2BF3
  539.     DC.W    $2BAA,$2B60,$2B16,$2ACC,$2A81,$2A36
  540.     DC.W    $29EA,$299E,$2952,$2905,$28B8,$286A
  541.     DC.W    $281C,$27CE,$277F,$2730,$26E0,$2691
  542.     DC.W    $2640,$25F0,$259F,$254D,$24FC,$24AA
  543.     DC.W    $2457,$2405,$23B2,$235E,$230A,$22B6
  544.     DC.W    $2262,$220D,$21B8,$2163,$210D,$20B7
  545.     DC.W    $2060,$200A,$1FB3,$1F5B,$1F04,$1EAC
  546.     DC.W    $1E54,$1DFB,$1DA3,$1D49,$1CF0,$1C97
  547.     DC.W    $1C3D,$1BE2,$1B88,$1B2D,$1AD2,$1A77
  548.     DC.W    $1A1C,$19C0,$1964,$1908,$18AC,$184F
  549.     DC.W    $17F2,$1795,$1737,$16DA,$167C,$161E
  550.     DC.W    $15C0,$1561,$1503,$14A4,$1445,$13E6
  551.     DC.W    $1386,$1327,$12C7,$1267,$1207,$11A6
  552.     DC.W    $1146,$10E5,$1084,$1023,$0FC2,$0F61
  553.     DC.W    $0EFF,$0E9E,$0E3C,$0DDA,$0D78,$0D16
  554.     DC.W    $0CB4,$0C51,$0BEF,$0B8C,$0B2A,$0AC7
  555.     DC.W    $0A64,$0A01,$099E,$093B,$08D7,$0874
  556.     DC.W    $0810,$07AD,$0749,$06E5,$0682,$061E
  557.     DC.W    $05BA,$0556,$04F2,$048E,$042A,$03C6
  558.     DC.W    $0362,$02FE,$0299,$0235,$01D1,$016D
  559.     DC.W    $0108,$00A4,$0040,$FFDC,$FF78,$FF14
  560.     DC.W    $FEAF,$FE4B,$FDE7,$FD83,$FD1E,$FCBA
  561.     DC.W    $FC56,$FBF2,$FB8E,$FB2A,$FAC6,$FA62
  562.     DC.W    $F9FE,$F99A,$F936,$F8D3,$F86F,$F80B
  563.     DC.W    $F7A8,$F745,$F6E1,$F67E,$F61B,$F5B8
  564.     DC.W    $F555,$F4F2,$F48F,$F42D,$F3CA,$F368
  565.     DC.W    $F305,$F2A3,$F241,$F1DF,$F17E,$F11C
  566.     DC.W    $F0BA,$F059,$EFF8,$EF97,$EF36,$EED5
  567.     DC.W    $EE75,$EE14,$EDB4,$ED54,$ECF4,$EC95
  568.     DC.W    $EC35,$EBD6,$EB77,$EB18,$EAB9,$EA5B
  569.     DC.W    $E9FC,$E99E,$E940,$E8E3,$E885,$E828
  570.     DC.W    $E7CB,$E76E,$E712,$E6B6,$E65A,$E5FE
  571.     DC.W    $E5A2,$E547,$E4EC,$E491,$E437,$E3DD
  572.     DC.W    $E383,$E329,$E2CF,$E276,$E21E,$E1C5
  573.     DC.W    $E16D,$E115,$E0BD,$E066,$E00F,$DFB8
  574.     DC.W    $DF61,$DF0B,$DEB5,$DE60,$DE0B,$DDB6
  575.     DC.W    $DD61,$DD0D,$DCB9,$DC66,$DC13,$DBC0
  576.     DC.W    $DB6D,$DB1B,$DAC9,$DA78,$DA27,$D9D6
  577.     DC.W    $D986,$D936,$D8E6,$D897,$D848,$D7FA
  578.     DC.W    $D7AC,$D75E,$D711,$D6C4,$D677,$D62B
  579.     DC.W    $D5DF,$D594,$D549,$D4FF,$D4B5,$D46B
  580.     DC.W    $D422,$D3D9,$D390,$D349,$D301,$D2BA
  581.     DC.W    $D273,$D22D,$D1E7,$D1A2,$D15D,$D118
  582.     DC.W    $D0D4,$D091,$D04E,$D00B,$CFC9,$CF87
  583.     DC.W    $CF46,$CF05,$CEC5,$CE85,$CE46,$CE07
  584.     DC.W    $CDC8,$CD8A,$CD4D,$CD10,$CCD3,$CC97
  585.     DC.W    $CC5C,$CC21,$CBE6,$CBAC,$CB73,$CB3A
  586.     DC.W    $CB01,$CAC9,$CA92,$CA5B,$CA25,$C9EF
  587.     DC.W    $C9B9,$C984,$C950,$C91C,$C8E9,$C8B6
  588.     DC.W    $C884,$C852,$C821,$C7F0,$C7C0,$C791
  589.     DC.W    $C762,$C733,$C705,$C6D8,$C6AB,$C67F
  590.     DC.W    $C653,$C628,$C5FD,$C5D3,$C5A9,$C580
  591.     DC.W    $C558,$C530,$C509,$C4E2,$C4BC,$C497
  592.     DC.W    $C472,$C44D,$C429,$C406,$C3E3,$C3C1
  593.     DC.W    $C3A0,$C37F,$C35E,$C33E,$C31F,$C301
  594.     DC.W    $C2E2,$C2C5,$C2A8,$C28C,$C270,$C255
  595.     DC.W    $C23A,$C221,$C207,$C1EE,$C1D6,$C1BF
  596.     DC.W    $C1A8,$C191,$C17C,$C167,$C152,$C13E
  597.     DC.W    $C12B,$C118,$C106,$C0F4,$C0E3,$C0D3
  598.     DC.W    $C0C3,$C0B4,$C0A6,$C098,$C08A,$C07E
  599.     DC.W    $C072,$C066,$C05B,$C051,$C047,$C03E
  600.     DC.W    $C036,$C02E,$C027,$C021,$C01B,$C015
  601.     DC.W    $C010,$C00C,$C009,$C006,$C004,$C002
  602.     DC.W    $C001,$C001,$C001,$C001,$C003,$C005
  603.     DC.W    $C008,$C00B,$C00F,$C013,$C018,$C01E
  604.     DC.W    $C024,$C02B,$C033,$C03B,$C044,$C04D
  605.     DC.W    $C057,$C062,$C06D,$C079,$C085,$C092
  606.     DC.W    $C0A0,$C0AE,$C0BD,$C0CC,$C0DC,$C0ED
  607.     DC.W    $C0FE,$C110,$C123,$C136,$C149,$C15E
  608.     DC.W    $C173,$C188,$C19E,$C1B5,$C1CC,$C1E4
  609.     DC.W    $C1FD,$C216,$C22F,$C24A,$C265,$C280
  610.     DC.W    $C29C,$C2B9,$C2D6,$C2F4,$C312,$C331
  611.     DC.W    $C351,$C371,$C392,$C3B3,$C3D5,$C3F7
  612.     DC.W    $C41A,$C43E,$C462,$C487,$C4AC,$C4D2
  613.     DC.W    $C4F8,$C520,$C547,$C56F,$C598,$C5C1
  614.     DC.W    $C5EB,$C616,$C640,$C66C,$C698,$C6C5
  615.     DC.W    $C6F2,$C720,$C74E,$C77D,$C7AC,$C7DC
  616.     DC.W    $C80C,$C83D,$C86F,$C8A1,$C8D3,$C906
  617.     DC.W    $C93A,$C96E,$C9A3,$C9D8,$CA0E,$CA44
  618.     DC.W    $CA7B,$CAB2,$CAEA,$CB22,$CB5B,$CB94
  619.     DC.W    $CBCE,$CC08,$CC43,$CC7E,$CCBA,$CCF6
  620.     DC.W    $CD33,$CD70,$CDAE,$CDEC,$CE2B,$CE6A
  621.     DC.W    $CEAA,$CEEA,$CF2A,$CF6B,$CFAD,$CFEF
  622.     DC.W    $D031,$D074,$D0B8,$D0FB,$D140,$D184
  623.     DC.W    $D1CA,$D20F,$D255,$D29C,$D2E3,$D32A
  624.     DC.W    $D372,$D3BA,$D403,$D44C,$D495,$D4DF
  625.     DC.W    $D529,$D574,$D5BF,$D60B,$D657,$D6A3
  626.     DC.W    $D6F0,$D73D,$D78B,$D7D8,$D827,$D875
  627.     DC.W    $D8C4,$D914,$D964,$D9B4,$DA04,$DA55
  628.     DC.W    $DAA7,$DAF8,$DB4A,$DB9D,$DBEF,$DC42
  629.     DC.W    $DC96,$DCE9,$DD3D,$DD92,$DDE7,$DE3C
  630.     DC.W    $DE91,$DEE7,$DF3D,$DF93,$DFEA,$E041
  631.     DC.W    $E098,$E0EF,$E147,$E19F,$E1F8,$E250
  632.     DC.W    $E2A9,$E303,$E35C,$E3B6,$E410,$E46B
  633.     DC.W    $E4C5,$E520,$E57B,$E5D7,$E632,$E68E
  634.     DC.W    $E6EA,$E747,$E7A4,$E800,$E85D,$E8BB
  635.     DC.W    $E918,$E976,$E9D4,$EA32,$EA91,$EAEF
  636.     DC.W    $EB4E,$EBAD,$EC0C,$EC6C,$ECCB,$ED2B
  637.     DC.W    $ED8B,$EDEB,$EE4C,$EEAC,$EF0D,$EF6D
  638.     DC.W    $EFCE,$F030,$F091,$F0F2,$F154,$F1B5
  639.     DC.W    $F217,$F279,$F2DB,$F33E,$F3A0,$F402
  640.     DC.W    $F465,$F4C8,$F52B,$F58D,$F5F0,$F654
  641.     DC.W    $F6B7,$F71A,$F77D,$F7E1,$F844,$F8A8
  642.     DC.W    $F90C,$F96F,$F9D3,$FA37,$FA9B,$FAFF
  643.     DC.W    $FB63,$FBC7,$FC2B,$FC8F,$FCF3,$FD58
  644.     DC.W    $FDBC,$FE20,$FE84,$FEE9,$FF4D,$FFB1
  645.     DC.W    $0015,$0079,$00DD,$0142,$01A6,$020A
  646.     DC.W    $026E,$02D3,$0337,$039B,$03FF,$0463
  647.     DC.W    $04C7,$050B,$058F,$05F3,$0657,$06BB
  648.     DC.W    $071E,$0782,$07E6,$0849,$08AC,$0910
  649.     DC.W    $0973,$09D6,$0A39,$0A9C,$0AFF,$0B62
  650.     DC.W    $0BC5,$0C27,$0C89,$0CEC,$0D4E,$0DB0
  651.     DC.W    $0E12,$0E74,$0ED5,$0F37,$0F98,$0FF9
  652.     DC.W    $105A,$10BB,$111C,$117D,$11DD,$123D
  653.     DC.W    $129D,$12FD,$135D,$13BC,$141C,$147B
  654.     DC.W    $14DA,$1539,$1597,$15F5,$1653,$16B1
  655.     DC.W    $170F,$176D,$17CA,$1827,$1884,$18E0
  656.     DC.W    $193C,$1998,$19F4,$1A50,$1AAB,$1B06
  657.     DC.W    $1B61,$1BBB,$1C16,$1C70,$1CC9,$1D23
  658.     DC.W    $1D7C,$1DD5,$1E2E,$1E86,$1EDE,$1F36
  659.     DC.W    $1F8D,$1FE4,$203B,$2091,$20E8,$213D
  660.     DC.W    $2193,$21E8,$223D,$2292,$22E6,$233A
  661.     DC.W    $238D,$23E1,$2434,$2486,$24D8,$252A
  662.     DC.W    $257C,$25CD,$261D,$266E,$26BE,$270E
  663.     DC.W    $275D,$27AC,$27FA,$2848,$2896,$28E3
  664.     DC.W    $2930,$297D,$29C9,$2A15,$2A60,$2AAB
  665.     DC.W    $2AF6,$2B40,$2B8A,$2BD3,$2C1C,$2C64
  666.     DC.W    $2CAC,$2CF4,$2D3B,$2D82,$2DC8,$2E0E
  667.     DC.W    $2E54,$2E99,$2EDD,$2F21,$2F65,$2FA8
  668.     DC.W    $2FEB,$302D,$306F,$30B0,$30F1,$3131
  669.     DC.W    $3171,$31B1,$31F0,$322E,$326C,$32AA
  670.     DC.W    $3257,$3323,$335F,$339B,$33D6,$3411
  671.     DC.W    $344B,$3484,$34BD,$34F6,$352E,$3565
  672.     DC.W    $359C,$35D3,$3609,$363F,$3673,$36A8
  673.     DC.W    $36DC,$370F,$3742,$3774,$37A6,$37D7
  674.     DC.W    $3808,$3838,$3868,$3897,$38C6,$38F4
  675.     DC.W    $3921,$394E,$397B,$39A6,$39D2,$39FC
  676.     DC.W    $3A27,$3A50,$3A79,$3AA2,$3ACA,$3AF1
  677.     DC.W    $3B18,$3B3E,$3B64,$3B89,$3BAD,$3BD1
  678.     DC.W    $3BF5,$3C17,$3C3A,$3C5B,$3C7C,$3C9D
  679.     DC.W    $3CBD,$3CDC,$3CFB,$3D19,$3D36,$3D53
  680.     DC.W    $3D70,$3D8C,$3DA7,$3DC1,$3DDB,$3DF5
  681.     DC.W    $3E0E,$3E26,$3E3E,$3E55,$3E6B,$3E81
  682.     DC.W    $3E96,$3EAB,$3EBF,$3ED2,$3EE5,$3EF7
  683.     DC.W    $3F09,$3F1A,$3F2B,$3F3A,$3F4A,$3F58
  684.     DC.W    $3F66,$3F74,$3F80,$3F8C,$3F98,$3FA3
  685.     DC.W    $3FAD,$3FB7,$3FC0,$3FC9,$3FD1,$3FD8
  686.     DC.W    $3FDF,$3FE5,$3FEA,$3FEF,$3FF3,$3FF7
  687.     DC.W    $3FFA,$3FFC
  688.  
  689. *****************************************************************************
  690. *        ROUTINE CREA OFFSET PER POSIZIONI Y DELLA PIC
  691. *****************************************************************************
  692.  
  693.     cnop    0,4
  694. makeoffy:
  695.     lea    offsety,a0
  696.     moveq    #0,d0
  697.     move.w    #ScreenY-1,d1
  698. .loopoffy:
  699.     move.w    d0,(a0)+
  700.     add.w    #ScreenX/8,d0
  701.     dbra    d1,.loopoffy
  702.     rts
  703.  
  704. *****************************************************************************
  705. *        ROUTINE CREA TABELLA PROSPETTIVA Z PRECALCOLATA
  706. *****************************************************************************
  707.  
  708.     cnop    0,4
  709. maketabz:
  710.     lea    tabz,a0
  711.     move.l    #2^16*512,d0        ; d0=Zo in 16.16
  712.     move.l    #-511+512,d1        ; d1=z+Zo
  713.     move.l    #32768+511-1,d7        ; how many z
  714. .looptabz:
  715.     move.l    d0,d3            ; d3.l=dividend
  716.     divu.l    d1,d3            ; d3.l=2^16*512/(z+Zo)
  717.     move.l    d3,(a0)+
  718.     addq.l    #1,d1            ; next z
  719.     cmp.l    d1,d7
  720.     bne.s    .looptabz
  721.     rts
  722.  
  723. *****************************************************************************
  724. *            ROUTINE CREA CUBO DI PUNTI
  725. *****************************************************************************
  726.  
  727. PLine    = 5            ; num points on 1 line
  728. PStep    = 10            ; pixel distance
  729. PDim    = PStep*(PLine-1)/2
  730. PointsObj = 2*(PLine^2)+2*PLine*(PLine-2)+2*((PLine-2)^2)
  731.  
  732.     cnop    0,4
  733. makecube:
  734.     lea    BuffPointsXYZ,a0
  735.  
  736.     move.w    #-PDim,d0
  737.     move.w    #-PDim,d1
  738.     move.w    #-PDim,d2    ; -z=costant
  739.     move.w    #PLine-1,d7
  740. .mkc1    move.w    #PLine-1,d6
  741. .mkc2    movem.w    d0-d2,(a0)
  742.     addq.w    #3*2,a0
  743.     add.w    #PStep,d0
  744.     dbra    d6,.mkc2
  745.     move.w    #-PDim,d0
  746.     add.w    #PStep,d1
  747.     dbra    d7,.mkc1
  748.  
  749.     move.w    #-PDim,d0
  750.     move.w    #-PDim,d1
  751.     move.w    #PDim,d2    ; z=costant
  752.     move.w    #PLine-1,d7
  753. .mkc3    move.w    #PLine-1,d6
  754. .mkc4    movem.w    d0-d2,(a0)
  755.     addq.w    #3*2,a0
  756.     add.w    #PStep,d0
  757.     dbra    d6,.mkc4
  758.     move.w    #-PDim,d0
  759.     add.w    #PStep,d1
  760.     dbra    d7,.mkc3
  761.  
  762.     move.w    #-PDim,d0    ; -x=costant
  763.     move.w    #-PDim,d1
  764.     move.w    #-PDim+PStep,d2
  765.     move.w    #PLine-1,d7
  766. .mkc5    move.w    #PLine-3,d6
  767. .mkc6    movem.w    d0-d2,(a0)
  768.     addq.w    #3*2,a0
  769.     add.w    #PStep,d2
  770.     dbra    d6,.mkc6
  771.     move.w    #-PDim+PStep,d2
  772.     add.w    #PStep,d1
  773.     dbra    d7,.mkc5
  774.  
  775.     move.w    #PDim,d0    ; x=costant
  776.     move.w    #-PDim,d1
  777.     move.w    #-PDim+PStep,d2
  778.     move.w    #PLine-1,d7
  779. .mkc7    move.w    #PLine-3,d6
  780. .mkc8    movem.w    d0-d2,(a0)
  781.     addq.w    #3*2,a0
  782.     add.w    #PStep,d2
  783.     dbra    d6,.mkc8
  784.     move.w    #-PDim+PStep,d2
  785.     add.w    #PStep,d1
  786.     dbra    d7,.mkc7
  787.  
  788.     move.w    #-PDim+PStep,d0
  789.     move.w    #-PDim,d1    ; -y=costant
  790.     move.w    #-PDim+PStep,d2
  791.     move.w    #PLine-3,d7
  792. .mkc9    move.w    #PLine-3,d6
  793. .mkc10    movem.w    d0-d2,(a0)
  794.     addq.w    #3*2,a0
  795.     add.w    #PStep,d2
  796.     dbra    d6,.mkc10
  797.     move.w    #-PDim+PStep,d2
  798.     add.w    #PStep,d0
  799.     dbra    d7,.mkc9
  800.  
  801.     move.w    #-PDim+PStep,d0
  802.     move.w    #PDim,d1    ; y=costant
  803.     move.w    #-PDim+PStep,d2
  804.     move.w    #PLine-3,d7
  805. .mkc11    move.w    #PLine-3,d6
  806. .mkc12    movem.w    d0-d2,(a0)
  807.     addq.w    #3*2,a0
  808.     add.w    #PStep,d2
  809.     dbra    d6,.mkc12
  810.     move.w    #-PDim+PStep,d2
  811.     add.w    #PStep,d0
  812.     dbra    d7,.mkc11
  813.  
  814.     rts
  815.  
  816. *****************************************************************************
  817. *        ROUTINE CHE FA LE COPPERLIST ORIZZONTALI
  818. *****************************************************************************
  819.  
  820. LINECOP:
  821.     lea    TabellaColori(PC),a0
  822.     lea    FineTabColori(PC),a3
  823.     lea    EffInCop,a1        ; Indirizzo barra orizzontale 1
  824.     lea    EffInCop2,a2        ; Indirizzo barra orizzontale 2
  825.     moveq    #54-1,d3        ; Numero di colori orizzontali
  826.     addq.l    #2,ColBarraAltOffset    ; Barra bassa - scorr. colori
  827.                     ; verso sinistra
  828.     subq.l    #2,ColBarraBassOffset    ; Barra alta - scorrimento colori
  829.                     ; verso destra
  830.     move.l    ColBarraAltOffset(PC),d0    ; Start Offset (1)
  831.     add.l    d0,a0        ; trova il colore giusto nella tabella colori
  832.                 ; secondo l'offset attuale
  833.     cmp.w    #-1,(a0)    ; siamo alla fine della tabella? (indicata
  834.                 ; con un dc.w -1)
  835.     bne.s    CSalta        ; se no, vai avanti
  836.     clr.l    ColBarraAltOffset    ; altrimenti riparti
  837.     lea    TabellaColori(PC),a0    ; dal primo colore
  838. CSalta:
  839.     move.l    ColBarraBassOffset(PC),d1    ; Start Offset (2)
  840.     sub.l    d1,a3                ; trova il colore giusto
  841.     cmp.w    #-1,-(a3)        ; siamo alla fine della tabella
  842.     bne.s    MettiColori        ; se non ancora vai avanti
  843.     move.l    #FineTabColori-TabellaColori,ColBarraBassOffset ; altrimenti
  844.                     ; fai ripartire dalla fine della
  845.                     ; tabella (dato che questa barra
  846.                     ; scorre all'indietro!)
  847.     lea    FineTabColori-2(PC),a3
  848. MettiColori:
  849.     addq.w    #2,a1        ; salta il dc.w $180
  850.     addq.w    #2,a2        ; salta il dc.w $180
  851.     move.w    (a0)+,(a1)+    ; Immetti il colore in coplist (barra1)
  852.     move.w    (a3),(a2)+    ; Immetti il col. nella barra 2
  853.  
  854.     cmp.w    #-1,(a0)    ; siamo alla fine della tabella colori? (bar1)
  855.     bne.s    NonFine        ; se non ancora vai avanti
  856.     lea     TabellaColori(PC),a0    ; altrimenti riparti da capo (bar1)
  857. NonFine:
  858.     cmp.w    #-1,-(a3)    ; siamo all'inizio della tab colori? (bar2)
  859.     bne.s    NonFine2    ; se non ancora vai avanti
  860.     lea     FineTabColori-2(PC),a3    ; altrimenti riparti dalla fine (bar2)
  861. NonFine2:
  862.     dbra    d3,MettiColori
  863.     rts
  864.  
  865. ColBarraAltOffset:
  866.     dc.l    0
  867.  
  868. ColBarraBassOffset:
  869.     dc.l    0
  870.  
  871.     dc.w     -1    ; fine tabella
  872. TabellaColori:
  873.     DC.W    $F0F,$F0E,$F0D,$F0C,$F0B,$F0A,$F09,$F08,$F07,$F06
  874.     DC.W    $F05,$F04,$F03,$F02,$F01,$F00,$F10,$F20,$F30,$F40
  875.     DC.W    $F50,$F60,$F70,$F80,$F90,$FA0,$FB0,$FC0,$FD0,$FE0
  876.     DC.W    $FF0,$EF0,$DF0,$CF0,$BF0,$AF0,$9F0,$8F0,$7F0,$6F0
  877.     DC.W    $5F0,$4F0,$3F0,$2F0,$1F0,$0F0,$0F1,$0F2,$0F3,$0F4
  878.     DC.W    $0F5,$0F6,$0F7,$0F8,$0F9,$0FA,$0FB,$0FC,$0FD,$0FE
  879.     DC.W    $0FF,$0EF,$0DF,$0CF,$0BF,$0AF,$09F,$08F,$07F,$06F
  880.     DC.W    $05F,$04F,$03F,$02F,$01F,$00F,$10F,$20F,$30F,$40F
  881.     DC.W    $50F,$60F,$70F,$80F,$90F,$A0F,$B0F,$C0F,$D0F,$E0F
  882. FineTabColori:
  883.     dc.w    -1    ; fine tabella
  884.  
  885. *******************************************************************************
  886. ;            ROUTINE DI PRINTING TESTO
  887. *******************************************************************************
  888.  
  889. PRINTATESTO:
  890.     LEA    SCROLLTESTO(PC),A0
  891.     LEA    VUOTO,A3
  892.     MOVEQ    #66-1,D3
  893. .PRINTRIGA:
  894.     MOVEQ    #40-1,D0
  895. .PRINTCHAR2:
  896.     MOVEQ    #0,D2
  897.     MOVE.B    (A0)+,D2
  898.     SUB.B    #$20,D2
  899.     MULU.W    #8,D2
  900.     MOVE.L    D2,A2
  901.     ADD.L    #FONT,A2
  902.     MOVE.B    (A2)+,(A3)
  903.     MOVE.B    (A2)+,40(A3)
  904.     MOVE.B    (A2)+,40*2(A3)
  905.     MOVE.B    (A2)+,40*3(A3)
  906.     MOVE.B    (A2)+,40*4(A3)
  907.     MOVE.B    (A2)+,40*5(A3)
  908.     MOVE.B    (A2)+,40*6(A3)
  909.     MOVE.B    (A2)+,40*7(A3)
  910.  
  911.     ADDQ.w    #1,A3
  912.     DBRA    D0,.PRINTCHAR2
  913.     ADD.W    #40*7,A3
  914.     DBRA    D3,.PRINTRIGA
  915.     RTS
  916.  
  917. SCROLLTESTO:
  918.     dc.b    "                                        "
  919.     dc.b    "                                        "
  920.     dc.b    "                  CALL                  "
  921.     dc.b    "                                        "
  922.     dc.b    "                                        "
  923.     dc.b    "                                        "
  924.     dc.b    "                                        "
  925.     dc.b    "                                        "
  926.     dc.b    "                                        "
  927.     dc.b    "     P L A S T I K     D R E A M S      "
  928.     dc.b    "                                        "
  929.     dc.b    "                  B B S                 "
  930.     dc.b    "                                        "
  931.     dc.b    "                                        "
  932.     dc.b    "                                        "
  933.     dc.b    "             +39 41 5732014             "
  934.     dc.b    "                                        "
  935.     dc.b    "                                        "
  936.     dc.b    "                                        "
  937.     dc.b    "                                        "
  938.     dc.b    "                                        "
  939.     dc.b    "                                        "
  940.     dc.b    "           SYSOP IS MRK/X-ZONE          "
  941.     dc.b    "                                        "
  942.     dc.b    "                                        "
  943.     dc.b    "    24 HOURS PER DAY - AMIGA STUFF      "
  944.     dc.b    "   DEMO SCENE ORIENTED - ALL XZN PRODS  "
  945.     dc.b    "                                        "
  946.     dc.b    "                                        "
  947.     dc.b    "   - PLASTIK DREAMS IS X-ZONE'S WHQ -   "
  948.     dc.b    "                                        "
  949.     dc.b    "                                        "
  950.  
  951.     ; pagina 2
  952.  
  953.     dc.b    "                                        "
  954.     dc.b    "                                        "
  955.     dc.b    "  GREETS TO:                            "
  956.     dc.b    "                                        "
  957.     dc.b    " ABYSS - AGRESSIONE - ALONE             "
  958.     dc.b    " AMIGA CIRCLE - BALANCE - CAPSULE       "
  959.     dc.b    " CHAOS AGE - CYDONIA - DEGENERATION     "
  960.     dc.b    " DIGITAL CHAOS - ELVEN - ESSENCE        "
  961.     dc.b    " ETERNALLY - KNB - FENIX CORPORATION    "
  962.     dc.b    " GODS - HAUJOBB - LLFB - METRO          "
  963.     dc.b    " MORBID VISIONS - NETWORK - NIVEL 7     "
  964.     dc.b    " ODRUSBA - QKP - RAM JAM - SOFT ONE     "
  965.     dc.b    " 3LE - TBL - TPD                        "
  966.     dc.b    "                                        "
  967.     dc.b    "                                        "
  968.     dc.b    "                                        "
  969.     dc.b    "                                        "
  970.     dc.b    "                                        "
  971.     dc.b    "                                        "
  972.     dc.b    "                                        "
  973.     dc.b    "                                        "
  974.     dc.b    "                                        "
  975.     dc.b    "                                        "
  976.     dc.b    "                                        "
  977.     dc.b    "                                        "
  978.     dc.b    "                                        "
  979.     dc.b    "                                        "
  980.     dc.b    "                                        "
  981.     dc.b    "                                        "
  982.     dc.b    " CODE: MODEM  FONTS: LANCH  MUSIC: AUD  "
  983.     dc.b    "                                        "
  984.     dc.b    "                                        "
  985.  
  986.     even
  987.  
  988. *******************************************************************************
  989. ;            ROUTINE DI RIMBALZO TESTO
  990. *******************************************************************************
  991.  
  992. RIMBALZO:
  993.     lea    BPLPOINTERStesto,a1
  994.     move.w    2(a1),d0
  995.     swap    d0
  996.     move.w    6(a1),d0
  997.     addq.l    #8,RIMBALZOPUNTA
  998.     move.l    RIMBALZOPUNTA(PC),a0
  999.     cmp.l    #FINERIMBALZO-4,a0
  1000.     bne.s    NOSTART
  1001.     move.l    #RIMBALZOTABELLA-4,RIMBALZOPUNTA
  1002.  
  1003. NOSTART:
  1004.     move.l    (a0),d1
  1005.     sub.l    d1,d0
  1006.     lea    BPLPOINTERStesto,a1
  1007.  
  1008.     move.w    d0,6(a1)
  1009.     swap    d0
  1010.     move.w    d0,2(a1)
  1011.     swap    d0
  1012.     rts
  1013.  
  1014. RIMBALZOPUNTA:
  1015.     dc.l    RIMBALZOTABELLA-4
  1016.  
  1017. RIMBALZOTABELLA:
  1018.     dc.l    0,0,0,0,0,0,0,0,0,0
  1019.     dc.l    0,0,0,0,0,0,0,0,0,0
  1020.     dc.l    0,0,0,0,0,0,0,0,0,0
  1021.     dc.l    0,0,0,0,0,0,0,0,0,0
  1022.     dc.l    0,0,0,0,0,0,0,0,0,0
  1023.     dc.l    0,0,0,0,0,0,0,0,0,0
  1024.     dc.l    0,0,0,0,0,0,0,0,0,0
  1025.     dc.l    0,0,0,0,0,0,0,0,0,0
  1026.     dc.l    0,0,0,0,0,0,0,0,0,0
  1027.     dc.l    0,0,0,0,0,0,0,0,0,0
  1028.     dc.l    0,0,0,0,0,0,0,0,0,0
  1029.     dc.l    0,0,0,0,0,0,0,0,0,0
  1030.     dc.l    0,0,0,0,0,0,0,0,0,0
  1031.     dc.l    0,0,0,0,0,0,0,0,0,0
  1032.     dc.l    0,0,0,0,0,0,0,0,0,0
  1033.     dc.l    0,0,0,0,0,0,0,0,0,0
  1034.     dc.l    0,0,0,0,0,0,0,0,0,0
  1035.     dc.l    0,0,0,0,0,0,0,0,0,0
  1036.     dc.l    0,0,0,0,0,0,0,0,0,0
  1037.     dc.l    0,0,0,0,0,0,0,0,0,0
  1038.     dc.l    0,0,0,0,0,0,0,0,0,0
  1039.     dc.l    0,0,0,0,0,0,0,0,0,0
  1040.     dc.l    0,0,0,0,0,0,0,0,0,0
  1041.     dc.l    0,0,0,0,0,0,0,0,0,0
  1042.     dc.l    0,0,0,0,0,0,0,0,0,0
  1043.     dc.l    0,0,0,0,0,0,0,0,0,0
  1044.     dc.l    0,0,0,0,0,0,0,0,0,0
  1045.     dc.l    0,0,0,0,0,0,0,0,0,0
  1046.     dc.l    0,0,0,0,0,0,0,0,0,0
  1047.     dc.l    0,0,0,0,0,0,0,0,0,0
  1048.  
  1049.     dc.l    -40,-40,-40,-40,-40,-40,-40,-40,-40
  1050.     dc.l    -40,-40,-2*40,-2*40
  1051.     dc.l    -2*40,-2*40,-2*40,-2*40,-2*40
  1052.     dc.l    -3*40,-3*40,-3*40,-3*40,-3*40            ; acceleriamo
  1053.     dc.l    -3*40,-3*40,-3*40,-3*40,-3*40
  1054.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1055.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1056.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1057.  
  1058.     dc.l    -5*40
  1059.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1060.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1061.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1062.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1063.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1064.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1065.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1066.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1067.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1068.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1069.     dc.l    -5*40,-5*40,-5*40,-5*40,-5*40
  1070.  
  1071.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1072.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1073.     dc.l    -4*40,-4*40,-4*40,-4*40,-4*40
  1074.     dc.l    -3*40,-3*40,-3*40,-3*40,-3*40
  1075.     dc.l    -3*40,-3*40,-3*40,-3*40,-3*40
  1076.     dc.l    -2*40,-2*40,-2*40,-2*40,-2*40            ; deceleriamo
  1077.     dc.l    -2*40,-2*40,-40,-40
  1078.     dc.l    -40,-40,-40,-40,-40,-40,-40,-40,-40,0,0,0,0,0    ; in cima
  1079.  
  1080.     dc.l    0,0,0,0,0,0,0,0,0,0
  1081.     dc.l    0,0,0,0,0,0,0,0,0,0
  1082.     dc.l    0,0,0,0,0,0,0,0,0,0
  1083.     dc.l    0,0,0,0,0,0,0,0,0,0
  1084.     dc.l    0,0,0,0,0,0,0,0,0,0
  1085.     dc.l    0,0,0,0,0,0,0,0,0,0
  1086.     dc.l    0,0,0,0,0,0,0,0,0,0
  1087.     dc.l    0,0,0,0,0,0,0,0,0,0
  1088.     dc.l    0,0,0,0,0,0,0,0,0,0
  1089.     dc.l    0,0,0,0,0,0,0,0,0,0
  1090.     dc.l    0,0,0,0,0,0,0,0,0,0
  1091.     dc.l    0,0,0,0,0,0,0,0,0,0
  1092.     dc.l    0,0,0,0,0,0,0,0,0,0
  1093.     dc.l    0,0,0,0,0,0,0,0,0,0
  1094.     dc.l    0,0,0,0,0,0,0,0,0,0
  1095.     dc.l    0,0,0,0,0,0,0,0,0,0
  1096.     dc.l    0,0,0,0,0,0,0,0,0,0
  1097.     dc.l    0,0,0,0,0,0,0,0,0,0
  1098.     dc.l    0,0,0,0,0,0,0,0,0,0
  1099.     dc.l    0,0,0,0,0,0,0,0,0,0
  1100.     dc.l    0,0,0,0,0,0,0,0,0,0
  1101.     dc.l    0,0,0,0,0,0,0,0,0,0
  1102.     dc.l    0,0,0,0,0,0,0,0,0,0
  1103.     dc.l    0,0,0,0,0,0,0,0,0,0
  1104.     dc.l    0,0,0,0,0,0,0,0,0,0
  1105.     dc.l    0,0,0,0,0,0,0,0,0,0
  1106.     dc.l    0,0,0,0,0,0,0,0,0,0
  1107.     dc.l    0,0,0,0,0,0,0,0,0,0
  1108.     dc.l    0,0,0,0,0,0,0,0,0,0
  1109.     dc.l    0,0,0,0,0,0,0,0,0,0
  1110.  
  1111.     dc.l    0,0,40,40,40,40,40,40,40,40,40             ; in cima
  1112.     dc.l    40,40,2*40,2*40
  1113.     dc.l    2*40,2*40,2*40,2*40,2*40            ; acceleriamo
  1114.     dc.l    3*40,3*40,3*40,3*40,3*40
  1115.     dc.l    3*40,3*40,3*40,3*40,3*40
  1116.     dc.l    4*40,4*40,4*40,4*40,4*40
  1117.     dc.l    4*40,4*40,4*40,4*40,4*40
  1118.     dc.l    4*40,4*40,4*40,4*40,4*40
  1119.  
  1120.     dc.l    5*40
  1121.     dc.l    5*40,5*40,5*40,5*40,5*40
  1122.     dc.l    5*40,5*40,5*40,5*40,5*40
  1123.     dc.l    5*40,5*40,5*40,5*40,5*40
  1124.     dc.l    5*40,5*40,5*40,5*40,5*40
  1125.     dc.l    5*40,5*40,5*40,5*40,5*40
  1126.     dc.l    5*40,5*40,5*40,5*40,5*40
  1127.     dc.l    5*40,5*40,5*40,5*40,5*40
  1128.     dc.l    5*40,5*40,5*40,5*40,5*40
  1129.     dc.l    5*40,5*40,5*40,5*40,5*40
  1130.     dc.l    5*40,5*40,5*40,5*40,5*40
  1131.     dc.l    5*40,5*40,5*40,5*40,5*40
  1132.  
  1133.     dc.l    4*40,4*40,4*40,4*40,4*40
  1134.     dc.l    4*40,4*40,4*40,4*40,4*40
  1135.     dc.l    4*40,4*40,4*40,4*40,4*40
  1136.     dc.l    3*40,3*40,3*40,3*40,3*40
  1137.     dc.l    3*40,3*40,3*40,3*40,3*40
  1138.     dc.l    2*40,2*40,2*40,2*40,2*40            ; deceleriamo
  1139.     dc.l    2*40,2*40,40,40
  1140.     dc.l    40,40,40,40,40,40,40,40,40,0,0,0,0,0,0,0    ; in fondo
  1141.  
  1142. FINERIMBALZO:
  1143.     dc.l    0
  1144.  
  1145. *******************************************************************************
  1146. ;                ROUTINE MUSICALE
  1147. *******************************************************************************
  1148.  
  1149. fade  = 0
  1150. jump = 0
  1151. system = 1
  1152. CIA = 1
  1153. exec = 1
  1154. opt020 = 0
  1155. use = $2009110
  1156.  
  1157.     include    "play.s"    ; La routine vera e propria!
  1158.  
  1159.     Section    modulozzo,DATA
  1160. P61_DATA:
  1161.     incbin    "P61.mod"    ; Compresso
  1162.  
  1163.     Section    smp,BSS_C
  1164. SAMPLES:
  1165.     ds.b    3488        ; lunghezza riportata dal p61con
  1166.  
  1167. ;=============================================================================
  1168.  
  1169.     cnop    0,8
  1170.     SECTION    GRAPHIC,DATA_C
  1171.  
  1172. COPPERLIST:
  1173.     dc.w    $8E,$2c81        ; DiwStrt - window start 
  1174.     dc.w    $90,$2cc1        ; DiwStop - window stop
  1175.     dc.w    $92,$38            ; DdfStrt - data fetch start
  1176.     dc.w    $94,$d0            ; DdfStop - data fetch stop
  1177.     dc.w    $104,0            ; BplCon2 - priority register
  1178. ;    dc.w    $106,$c00        ; BplCon3
  1179. ;    dc.w    $10c,$11        ; BplCon4
  1180. ;    dc.w    $1fc,0            ; burst 64 bit
  1181. BplCon1:
  1182.     dc.w    $102,0            ; BplCon1 - scroll register
  1183.     dc.w    $108,0            ; Bpl1Mod - modulo pl. dispari
  1184.     dc.w    $10a,0            ; Bpl2Mod - modulo pl. pari
  1185.  
  1186. BPLPOINTERS:
  1187.     dc.w    $e0,0,$e2,0        ; 1 bitplane
  1188. BPLPOINTERStesto:
  1189.     dc.w    $e4,0,$e6,0        ; 2 bitplane (testo)
  1190.  
  1191.  
  1192.     dc.w    $180,0,$182,$ddd,$184,$bbf,$186,$bbf
  1193.  
  1194.     dc.w    $100,$200        ; 0 bitplanes
  1195.     dc.w    $2d01,$FFFE        ; Wait linea $29
  1196. EffInCop2:
  1197.     dcb.l    54,$1800000        ; 54 Color0 di seguito, che ogni 8
  1198.                     ; pixel in avanti riempiono la linea
  1199.  
  1200.     dc.w    $2a01,$FFFE        ; Wait linea $2a
  1201.     dc.w    $100,%0010001000000001    ; BPLCON0 - 1 bitplane LOWRES
  1202.     dc.w    $180,0            ; Color0 nero
  1203.  
  1204.  
  1205.     dc.w    $FFDF,$FFFE        ; Wait speciale per andare in zona PAL
  1206.  
  1207.     dc.w    $2A01,$FFFE        ; Attendi la linea $2a+$ff
  1208.     dc.w    $100,$200        ; 0 bitplanes
  1209. EffInCop:
  1210.     dcb.l    54,$1800000        ; 54 Color0 di seguito, che ogni8
  1211.                     ; pixel in avanti riempiono la linea
  1212.  
  1213.     dc.w    $2B07,$FFFE        ; Wait linea $ff+$2b
  1214.     dc.w    $180,0            ; Color0 nero
  1215.  
  1216.     dc.w    $ffff,$fffe
  1217.     
  1218. *****************************************************************************
  1219. *                PICTURE
  1220. *****************************************************************************
  1221.  
  1222.     cnop    0,8
  1223.     SECTION    planarpic,BSS_C
  1224.     ds.b    40*256
  1225. Picture:
  1226.     ds.b    ScreenX*ScreenY/8*2
  1227.  
  1228.     Section    FontiDelClitunno,DATA
  1229. FONT:
  1230.     incbin    "prova.fnt"
  1231.  
  1232. *****************************************************************************
  1233. *                USER MEMORY
  1234. *****************************************************************************
  1235.  
  1236.     cnop    0,8
  1237.     SECTION    fastram,BSS
  1238.  
  1239. tabz:
  1240.     ds.l    32768+511
  1241. offsety:
  1242.     ds.w    ScreenY
  1243.  
  1244. BuffPointsXYZ:
  1245.     ds.w    PointsObj*3
  1246. PointsXYZ:
  1247.     ds.w    PointsObj*3
  1248. PointsXY:
  1249.     ds.w    PointsObj*2
  1250.  
  1251. dax    = 2
  1252. day    = 3
  1253. daz    = 4
  1254. angles        ds.w    3
  1255. xyzcosta    ds.w    9
  1256.  
  1257. clrreg        ds.l    15
  1258. oldsp        ds.l    1
  1259.  
  1260.     Section    AreaVuota,BSS_C
  1261. VUOTO:
  1262.     ds.b    40*512
  1263.     ds.b    1000
  1264.  
  1265.     END
  1266.  
  1267.